iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Odoo

Odoo16 入門介紹系列 第 15

Day15_odoo_Class Inheritance

  • 分享至 

  • xImage
  •  

Class_Inheritance

Class inheritance(類別繼承)是物件導向編程(OOP)中一個重要的概念,它允許你建立新的類別,基於現有的類別(父類別或基類別)來定義新的類別(子類別或衍生類別)。子類別可以繼承父類別的屬性和方法,並且可以擴展或修改它們,同時還可以添加新的屬性和方法。

https://ithelp.ithome.com.tw/upload/images/20230928/20163098h7IPxEOG2L.png

1.屬性和方法繼承: 子類別會繼承父類別的屬性和方法,這意味著你可以重用父類別中定義的程式碼。

2.擴展和修改: 子類別可以擴展或修改繼承的屬性和方法。這使得你可以根據需要自定義子類別的行為,
                而不必重新實現所有內容。

3.新增屬性和方法: 你可以在子類別中添加新的屬性和方法,以滿足特定需求。

4.維護性和可讀性: 使用類別繼承可以提高程式碼的維護性和可讀性,因為相關的屬性和方法通常
                  位於同一個類別中。

5.資料表結構: 在使用 Class Inheritance 時,通常子類別的資料存儲在與父類別相同的資料表中
                ,這使得資料結構相對簡單,並且可以更容易地查詢和管理。

6.模組化和重用: 透過 Class Inheritance,你可以創建可重用的程式碼模塊,這些模塊可以在整個
                應用程式中使用,提高了程式碼的模組化程度。

修改既有或是擴充model,record存在在同一個DB_Table當中:

當我們在開發addons時,我們想要在使用BookName,但我們需要再增加欄位並且也希望創建的資料存放在同一個Table中,這時候我們就可以使用Class Inheritance:

model.py

class BookNameInheritance(models.Model):
    _inherit = 'book.name'

    librarien_field = fields.Many2one('employee',string='librarian',ondelete='set null')

__manifest__.py

......
 'depends': ['library'],
......

在上面的例子中,我們可以方向,筆者只輸入了_inherit,並指定了model book.name,這種宣告方式是這種繼承的特性,如果你要宣告_name_description的話,在Class Inheritance你必須也必定要跟book.name是一樣的:

class BookName(models.Model):
    _name = 'book.name'
    _description = "book's name model"
    _inherit = 'book.name'
    
    librarien_field = fields.Many2one('employee',string='librarian',ondelete='set null')

筆者在開發中,其實最常用到的並不是Class Inheritance而是下一個章節的Prototype Inhertiance,不同於 Class InheritancePrototype Inheritance 的特點是通過物件的複製和委託來實現繼承。這種方法更靈活,但可能需要更多的程式碼和設計工作。,主要的原因是因為,當你在開發addons時,你會比較希望資料結構不要太複雜,這樣未來在維護或在開發,都是比較好去讓其他人接手的,因為兩者最大的差別就是在Table上的儲存。


上一篇
Day14_odoo_關聯欄位總結
下一篇
Day16_odoo_Prototype Inheritance
系列文
Odoo16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言